package com.ruanxie.controller.student;

import com.ruanxie.dto.student.StudentGetCourseGradeDTO;
import com.ruanxie.dto.student.StudentHuebImportDTO;
import com.ruanxie.result.PageResult;
import com.ruanxie.result.Result;
import com.ruanxie.service.StudentService;
import com.ruanxie.vo.student.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;

//TODO 当时设计的时候没有想到请求路径的改动，这里代码的冗余有点严重，急需优化一下。
//	例如：发生了改动，配置文件的拦截需要改动，同时如果有设置角色对应的请求路径的话，也需要改动，一下子需要同时改动好多地方。
//	可能的解决方案：需要想想，能不能将请求的路径开头放在配置文件中 或者 与控制层的类对应 或者 使用常量类
//	以后需要尽可能的避免直接使用常量了

/**
 * 学生端
 */
@RestController
@RequestMapping("/api/student")
@Slf4j
@Api(tags = "学生端")
public class StudentController {
    @Autowired
    private StudentService studentService;
    /**
     * 获取到河北经贸大学的验证码
     * (这里是通过selenium+proxy，模拟登录浏览器获取到的)
     * @return
     */
    @GetMapping("/getHuebCaptcha")
    @ApiOperation("获取到河北经贸大学的验证码")
    public Result<StudenGetHuebCaptchaVO> GetHuebCaptcha(){
        log.info("接到获取河北经贸大学的验证码的请求...");
        String captcha= studentService.getHuebCaptcha();
        StudenGetHuebCaptchaVO studenGetHuebCaptchaVO=new StudenGetHuebCaptchaVO(captcha);
        return Result.success(studenGetHuebCaptchaVO);
    }
    //TODO 直接一气呵成，还是分步完成
    //  可以分为获取cookie，再一步步获取其他数据

    /**
     * 导入河北经贸大学教务系统数据
     * @return
     */
    @PostMapping("/huebImport")
    @ApiOperation("导入河北经贸大学教务系统的数据")
    public Result<StudentHuebImportVO> HuebImport(@RequestBody StudentHuebImportDTO studentHuebImportDTO) throws IOException {
        log.info("接受到教务导入请求");
        String huebCookie=studentService.getHuebCookie(studentHuebImportDTO);
        StudentHuebImportVO studentHuebImportVO=new StudentHuebImportVO(huebCookie);

        //TODO 导入教务系统的所有数据，暂时先放在这里，后续也能分下模块
        studentService.huebImportAllData(huebCookie);

        return Result.success(studentHuebImportVO);
    }

    //教务查询相关接口

    /**
     * 获取到当前学年当前学期学生个人的课表
     * @return
     */
    @GetMapping("/getCourseScheduleOfStudent")
    @ApiOperation("获取到当前学年当前学期学生个人的课表")
    public Result<StudentGetCourseScheduleOfStudentVO> getCourseScheduleOfStudent(){
        log.info("获取到个人课表...");
        StudentGetCourseScheduleOfStudentVO studentGetCourseScheduleOfStudentVO =studentService.getStudentGetCourseScheduleOfStudentVO();
        return Result.success(studentGetCourseScheduleOfStudentVO);
    }




    /**
     * 查询专业教学执行计划
     * @return
     */
    @GetMapping("/getMajorTeachingPlanInfo")
    @ApiOperation("查询专业教学执行计划")
    public Result<MajorTeachingPlanInfoVO> getMajorTeachingPlanInfo(){
        MajorTeachingPlanInfoVO majorTeachingPlanInfoVO=studentService.getMajorTeachingPlanInfo();
        return Result.success(majorTeachingPlanInfoVO);
    }

    /**
     * 查询学生成绩
     * @param studentGetCourseGradeDTO
     * @return
     */
    @PostMapping("/getCourseGrade")
    @ApiOperation("查询学生成绩")
    public Result< PageResult > getCourseGrade(@RequestBody StudentGetCourseGradeDTO studentGetCourseGradeDTO){
        log.info("查询学生成绩，参数为：{}",studentGetCourseGradeDTO);
        PageResult pageResult=studentService.getCourseGrade(studentGetCourseGradeDTO);
        return Result.success(pageResult);
    }

}
